const villagersData = require('../../utils/villagers.js').villagers;

// 从本地文件获取动物数据
function mapVillagerData(raw, index) {
  // 性别字段适配：'♂'->'男'，'♀'->'女'
  var gender = raw['性别'] === '♂' ? '男' : (raw['性别'] === '♀' ? '女' : '未知');
  // 性格字段适配：去除血型后缀
  var personality = raw['性格'] ? raw['性格'].replace(/[AB型]/g, '') : '';

  // 检查 name 字段是否存在且不为空
  var name = raw['名称'] || raw['名字'] || raw['Name'] || '未知';

  // 构造云存储路径
  var cloudPath = 'cloud://cloud1-1gpyv55g5212b580.636c-cloud1-1gpyv55g5212b580-1363170652/image/' + name + '.png';

  return {
    id: index, // 使用索引作为ID
    name: name,
    image: cloudPath, // 使用云存储图片路径
    gender: gender,
    species: raw['种族'] || '未知',
    personality: personality || '其他',
    isSelected: false
  };
}

Page({
  data: {
    animalList: [],
    searchKey: '',
    showList: [],
    selectedCount: 0,
    isButtonDisabled: true,
    // 添加投票限制相关数据
    hasVotedToday: false, // 用户今天是否已投票
    maxSelections: 10 // 最大选择数量
  },

  onLoad() {
    this.initData();
    // 自动初始化数据库
    this.initDatabase();
    // 检查用户今天是否已经投票
    this.checkUserVoteStatus();
  },

  // 检查用户投票状态
  checkUserVoteStatus() {
    wx.cloud.callFunction({
      name: 'vote',
      data: {
        checkVoteStatus: true
      }
    }).then(res => {
      if (res.result && res.result.hasVoted) {
        this.setData({
          hasVotedToday: true
        });
        wx.showToast({
          title: '您今天已经投过票了',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('检查投票状态失败:', err);
    });
  },

  initData() {
    wx.showLoading({ title: '加载中...' });
    
    try {
      // 批量导入小动物数据
      const animalList = villagersData.map((villager, index) => mapVillagerData(villager, index));
      console.log('获取到动物数据数量:', animalList.length);
      
      this.setData({ 
        animalList: animalList
      }, () => {
        this.updateShowList(); // 确保更新显示列表
        console.log('当前显示的动物列表数量:', this.data.showList.length);
        wx.hideLoading();
      });
    } catch (err) {
      wx.hideLoading();
      console.error('获取动物数据失败:', err);
      wx.showToast({
        title: '加载失败',
        icon: 'none'
      });
    }
  },

  updateShowList() {
    const { animalList, searchKey } = this.data;
    let list = animalList.slice(); // 使用 slice 避免直接修改原数组

    // 搜索
    if (searchKey.trim()) {
      list = list.filter(item => item.name.indexOf(searchKey.trim()) !== -1);
    }
    console.log('筛选后的动物列表数量:', list.length);
    this.setData({ showList: list });
  },

  /**
   * 切换动物选中状态
   * @param {Object} e - 事件对象，包含当前点击元素的dataset.id
   * @description 根据点击的动物ID切换选中状态，更新显示列表并刷新选中状态
   */
  toggleSelection(e) {
    // 如果用户今天已经投过票，则不允许选择
    if (this.data.hasVotedToday) {
      wx.showToast({
        title: '您今天已经投过票了',
        icon: 'none'
      });
      return;
    }

    const animalId = e.currentTarget.dataset.id;
    const { animalList, selectedCount, maxSelections } = this.data;
    
    // 检查是否已达到最大选择数量
    const animal = animalList.find(item => item.id === animalId);
    if (!animal.isSelected && selectedCount >= maxSelections) {
      wx.showToast({
        title: '最多只能选择'+maxSelections+'个小动物',
        icon: 'none'
      });
      return;
    }
    
    const newList = animalList.map(item => 
      item.id === animalId ? { ...item, isSelected: !item.isSelected } : item
    );
    
    this.setData({
      animalList: newList
    }, () => {
      this.updateShowList();
      this.updateSelectedStatus();
    });
  },

  handleSearch(e) {
    this.setData({ searchKey: e.detail.value }, this.updateShowList);
  },

  updateSelectedStatus() {
    const { animalList } = this.data;
    const selectedCount = animalList.filter(item => item.isSelected).length;
    this.setData({
      selectedCount,
      isButtonDisabled: selectedCount === 0 || this.data.hasVotedToday
    });
  },

  handleRefresh() {
    this.initData();
  },

  // 测试云函数连接
  testCloudFunction() {
    wx.showLoading({ title: '测试中...' });
    
    wx.cloud.callFunction({
      name: 'login'
    }).then(res => {
      wx.hideLoading();
      console.log('云函数测试成功:', res);
      wx.showToast({
        title: '云函数连接正常',
        icon: 'success'
      });
    }).catch(err => {
      wx.hideLoading();
      console.error('云函数测试失败:', err);
      wx.showToast({
        title: '云函数连接失败',
        icon: 'none'
      });
    });
  },

  // 初始化数据库
  initDatabase() {
    wx.showLoading({ title: '初始化数据库...' });
    
    wx.cloud.callFunction({
      name: 'initDatabase'
    }).then(res => {
      wx.hideLoading();
      console.log('数据库初始化结果:', res);
      if (res.result && res.result.success) {
        wx.showToast({
          title: '数据库初始化成功',
          icon: 'success'
        });
      } else {
        wx.showToast({
          title: res.result && res.result.message || '数据库初始化失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('数据库初始化失败:', err);
      wx.showToast({
        title: '数据库初始化失败',
        icon: 'none'
      });
    });
  },

  // 测试数据库连接
  testDatabase() {
    wx.showLoading({ title: '测试数据库...' });
    
    wx.cloud.callFunction({
      name: 'testDatabase'
    }).then(res => {
      wx.hideLoading();
      console.log('数据库测试结果:', res);
      if (res.result && res.result.success) {
        wx.showToast({
          title: '数据库连接正常',
          icon: 'success'
        });
      } else {
        wx.showToast({
          title: res.result && res.result.message || '数据库连接失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('数据库测试失败:', err);
      wx.showToast({
        title: '数据库测试失败',
        icon: 'none'
      });
    });
  },

  // 测试投票数据
  testVoteData() {
    wx.showLoading({ title: '检查投票数据...' });
    
    wx.cloud.callFunction({
      name: 'getRankList',
      data: { limit: 10 }
    }).then(res => {
      wx.hideLoading();
      console.log('投票数据检查结果:', res);
      if (res.result && res.result.success) {
        const data = res.result.data || [];
        wx.showToast({
          title: '找到 '+data.length+' 个投票记录',
          icon: 'success'
        });
      } else {
        wx.showToast({
          title: res.result && res.result.message || '检查失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('投票数据检查失败:', err);
      wx.showToast({
        title: '检查失败',
        icon: 'none'
      });
    });
  },

  handleComplete() {
    // 检查用户是否已经投过票
    if (this.data.hasVotedToday) {
      wx.showToast({
        title: '您今天已经投过票了',
        icon: 'none'
      });
      return;
    }
    
    if (this.data.selectedCount === 0) return;
    const selectedAnimals = this.data.animalList.filter(item => item.isSelected);
    
    // 检查选择数量是否超过限制
    if (selectedAnimals.length > this.data.maxSelections) {
      wx.showToast({
        title: '最多只能选择'+this.data.maxSelections+'个小动物',
        icon: 'none'
      });
      return;
    }
    
    wx.showLoading({
      title: '投票中...',
      mask: true
    });
    
    // 调用云函数进行批量投票
    wx.cloud.callFunction({
      name: 'vote',
      data: {
        selectedAnimals: selectedAnimals.map(animal => ({
          villagerId: animal.name,
          villagerName: animal.name
        }))
      }
    }).then(res => {
      wx.hideLoading();
      console.log('投票响应:', res);
      
      if (res.result && res.result.success) {
        // 投票成功
        this.setData({
          hasVotedToday: true
        });
        
        wx.showToast({
          title: '成功为 '+selectedAnimals.length+' 个小动物投票',
          icon: 'success',
          duration: 2000
        });
        
        // 延迟返回上一页或刷新状态
        setTimeout(() => {
          wx.navigateBack();
        }, 2000);
      } else {
        // 投票失败
        console.error('投票失败响应:', res.result);
        wx.showToast({
          title: res.result && res.result.message || '投票失败',
          icon: 'none',
          duration: 2000
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('投票失败:', err);
      wx.showToast({
        title: '投票失败，请稍后重试',
        icon: 'none',
        duration: 2000
      });
    });
  }
});

